# 字母大小写转换     使用与或的方法

assume cs:codesg,ds:datasg
datasg segment
	db 'BaSiC'
	db 'iNfOrMaTiOn'
datasg ends

codesg segment
start: 	mov ax,datasg		# 设置ds 指向 datasg 段
		mov bx,0 			# 设置(bx)=0 ds:bx 指向 'BaSiC' 的第一个字母
		mov cx,5 			# 设置循环次数 5 因为 'BaSiC'  有5个字母

s:		mov al,[bx]			# 将ASCII 码从 ds:bx 指向的单元中取出
		and al,11011111B	# 将al 中的 ASCII 码的第5位置为0，变为大写字母   and 操作 小写转大写
		mov [bx],al 		# 将转变后的 ASCII 码写回单元
		inc bx				# (bx) 加1，ds:bx 指向下一个字母
		loop s

		mov bx,5 			# 设置(bx)=5 ds:bx 指向 'iNfOrMaTiOn' 的第一个字母
		mov cx,11 			# 设置循环次数 11 因为 'iNfOrMaTiOn'  有5个字母
s0:   	mov al,[bx]
		or al,00100000B    # or 操作 大写转小写
		mov [bx],al
		inc bx
		loop s0

		mov ax,4c00h
		int 21h
codesg ends
end start
